<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        
    </style>
</head>
<body>
    
</body>
<script>
    // 1. 封装 随机一个4位数字的验证码 的函数
    function randomNumber( n ){
        var str = "";
        for(var i=0;i<n;i++){
            str += random(0, 9)
        }
        return str;
    }
    // console.log( randomNumber( 4 ) );
    // console.log( randomNumber( 8 ) );
    // console.log( randomNumber( 6 ) );

    // 2. 封装 随机一个4位数字字母混合的验证码 的函数
    // 数字，大写字母，小写字母

    // 四种思路：
        // 随机类型，根据类型随机指定字符
        // 写出所有字符，随机取索引
        // 先随机一个字符库，在字符库中所有类型都是相同的，随机取索引

    function randomString( n ){
        var str = "";
        for(var i=0;i<n;i++){
            // 随机类型：数字0，大字母1，小字母2
            var type = random(0, 2);
            // 判断类型，根据类型随机指定字符
            if(type === 0){
                str += random(0, 9);
            }else if(type === 1){
                str += String.fromCharCode(random(65, 90));
            }else{
                str += String.fromCharCode(random(97, 122));
            }
        }
        return str;
    }
    // console.log( randomString(6) )
    // console.log( randomString(8) )
    // console.log( randomString(4) )

    
    // 3. 封装 随机rgb格式的颜色值 的函数
    //     - 返回的数据如：rgb(23,53,126)
    function randomRGB(){
        return "rgb("+ random(0,255) +","+ random(0,255) +","+ random(0,255) +")"
    }
    // console.log(randomRGB());

    // 4. 封装 随机十六进制的颜色值 的函数
    //     - #6af135
    function randomColor(){
        var r = random(0,255).toString(16);
        var g = random(0,255).toString(16);
        var b = random(0,255).toString(16);
        return "#" + cz(r) + cz(g) + cz(b);
    }
    
    // console.log( randomColor() );

    // 5. 封装 实现日期格式化 的函数
    //     - 将系统日期转化成：xxxx年xx月xx日 星期x xx:xx:xx


    // 6. 封装 可以传入两个日期 的函数，实现计算两个日期之间的差值的功能
    //     - return {day: x, hours: x, minutes: x, secondes: x}
    //     - 思考：（实现）
    //         - 同时传入两个日期参数，表示计算这两个指定日期的差值
    //         - 只传入一个日期参数，表示计算当前日期距离指定日期的差值

    function dateDiff(d1, d2){
        var date1 = new Date(d1)
        // 封装思想：
        // 可选参数的默认值的处理
        // 根据是否传参，决定对于参数的处理
        var date2 = d2 ? new Date(d2) : new Date();

        var t = Math.abs(date1.getTime() - date2.getTime());

        return {
            time: t
        }
    }

    // console.log(dateDiff("2000.1.1", "2008.8.8"))
    // console.log(dateDiff("2000.1.1"))



    function cz(n){
        // 字符的00单独处理
        if(typeof n === "string" && n.length > 1){
            return n;
        }
        // 十六进制为字符型数据，当长度不足2时，需要补0
        if(n < 10 || n.length < 2){
            return "0" + n;
        }
        return n;
    }
    // console.log( cz(5) );
    // console.log( cz(0) );
    // console.log( cz("a") );
    // console.log( cz("0") );
    // console.log( cz("f") );
    // console.log( cz(12) );
    // console.log( cz("00") );
    // console.log( cz("af") );
    // console.log( cz(06) );

    function random(max,min){
        return Math.round(Math.random()*(max-min)+min);
    }
</script>
</html>